package com.tensquare.qa.dao;

import com.tensquare.qa.pojo.Problem;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;


/**
 * 数据访问接口
 *
 * @author Administrator
 */
public interface ProblemDao extends JpaRepository<Problem, String>, JpaSpecificationExecutor<Problem> {

    //jpql、hql 都是面向对象（实体） 的 查询的语言，不能出现表名。
    // 关联查询 jpql便随实体或者、纯sql语句
    //sql 语句 in 钱太高多 会 执行效率会低。
    //nativeQuery = true开启原生sql语句模式
    //最新问题 排序
    @Query(value = "select * from tb_problem,tb_pl where id=problemid and labelid=? ORDER BY replytime desc",nativeQuery = true)
    //分两步的：select * from tb_problem where id in (select problemid from tb_pl where labelid="1") 关联查出来id再查另一张表
    //这个  sql 语句可以识别、字段起不起别名看个人，两表列名冲突 必须 起小名。
    public Page<Problem> newList(String labelid, Pageable pageable);//jpa的分页的话就加个Pageable对象就好

    //最热问题 排序
    //最热 按照 reply 回复数量做 降序
    @Query(value = "select * from tb_problem,tb_pl where id=problemid and labelid=? ORDER BY reply desc",nativeQuery = true)
    public Page<Problem> hotList(String labelid, Pageable pageable);

    //等待回答的问题 排序
    @Query(value = "select * from tb_problem,tb_pl where id=problemid and labelid=? and reply=0 ORDER BY createtime desc",nativeQuery = true)
    public Page<Problem> waitList(String labelid, Pageable pageable);

    //这里面还想加  条件 可以加specification 条件对象













}
